package pfc.etsii.ull.es.shared.utilidades;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import pfc.etsii.ull.es.shared.generated.Informe;
import pfc.etsii.ull.es.shared.generated.SchemaDatos.Mapa;

public class Mapeo {
	
	
	private static Map<String, String> getMapa(String mapaString) {
		
		Map<String, String> resultado = new HashMap<String, String>();
		String[] arrayMapeo = mapaString.split(",");
		List<String> listaMapeo = new ArrayList<String>();
		
		for (int i = 0; i < arrayMapeo.length; i++) {
			listaMapeo.add(arrayMapeo[i]);
		}
		
		for (String mapita : listaMapeo) {
			String[] arrayValores = mapita.split("->");
			String cadena = arrayValores[0];
			String numero = arrayValores[1];
			cadena = cadena.replaceAll(" ", "");
			numero = numero.replaceAll(" ", "");
			resultado.put(cadena, numero);
		}
		
		
		return resultado;
	}
	
	
	private static String buscarMapa(String mapaNombre, List<Mapa> mapas) {
		
		for (Mapa mapa : mapas) {
			if (mapa.getID().equals(mapaNombre)) {
				return mapa.getMapeos();
			}
		}
		
		return null;
		
	}
	
	public static Map<String, String> devolverMapa(String mapaNombre, List<Mapa> mapas) {
		
		String resultadoMapeo = buscarMapa(mapaNombre, mapas);
		if (resultadoMapeo != null) {
			return getMapa(resultadoMapeo);
		}
		
		return null;
	}
	
	
	public static <T, E> E getValueByKey(Map<T, E> map, T key) {
	    for (Entry<T, E> entry : map.entrySet()) {
	        if (key.equals(entry.getKey())) {
	            return entry.getValue();
	        }
	    }
	    return null;
	}


	public static String getValueByKey(Map<String, String> mapaS, Long valueAsLong) {
		String valueAsString = valueAsLong.toString();
	    for (Entry<String, String> entry : mapaS.entrySet()) {
	        if (valueAsString.equals(entry.getKey())) {
	            return entry.getValue();
	        }
	    }
		return null;
	}

}
